package com.autorun.server.service;

import com.autorun.server.entity.Role;
import com.autorun.server.mapper.RoleMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 角色管理服务
 * 
 * @author autorun
 * @version 1.0.0
 */
@Slf4j
@Service
public class RoleService {

    @Autowired
    private RoleMapper roleMapper;

    /**
     * 获取用户角色统计信息
     * 
     * @param userId 用户ID
     * @return 统计信息
     */
    public Map<String, Object> getUserRoleStats(Integer userId) {
        Map<String, Object> stats = new HashMap<>();
        
        // 获取总窗口数
        Integer totalWindows = roleMapper.countByUserId(userId);
        
        // 获取在线窗口数
        Integer onlineWindows = roleMapper.countOnlineByUserId(userId);
        
        stats.put("total_windows", totalWindows);
        stats.put("online_windows", onlineWindows);
        stats.put("offline_windows", totalWindows - onlineWindows);
        
        return stats;
    }

    /**
     * 获取用户角色列表
     * 
     * @param userId 用户ID
     * @return 角色列表
     */
    public List<Role> getUserRoles(Integer userId) {
        return roleMapper.findByUserId(userId);
    }

    /**
     * 根据用户ID和窗口ID获取角色
     * 
     * @param userId 用户ID
     * @param windowId 窗口ID
     * @return 角色信息
     */
    public Role getRoleByUserIdAndWindowId(Integer userId, String windowId) {
        return roleMapper.findByUserIdAndWindowId(userId, windowId);
    }

    /**
     * 创建或更新角色
     * 
     * @param role 角色信息
     * @return 角色信息
     */
    public Role saveRole(Role role) {
        if (role.getId() == null) {
            // 新建角色
            roleMapper.insert(role);
        } else {
            // 更新角色
            roleMapper.updateById(role);
        }
        return role;
    }

    /**
     * 删除角色
     * 
     * @param id 角色ID
     */
    public void deleteRole(Integer id) {
        roleMapper.deleteById(id);
    }

    /**
     * 根据用户ID删除所有角色
     * 
     * @param userId 用户ID
     */
    public void deleteRolesByUserId(Integer userId) {
        Map<String, Object> queryMap = new HashMap<>();
        queryMap.put("user_id", userId);
        roleMapper.deleteByMap(queryMap);
    }
}